#ifndef RSA_H
#define RSA_H
#include <qstring.h>
#include <qmath.h>
#include <QTime>
#include <QtGlobal>
#include <cstdlib>
#include <iostream>
#define MAX_LENTH 1024//单次加密最大长度，字节数
class rsa
{
public:
    rsa();
    unsigned char plaintext[MAX_LENTH];           //明文字符数组
    unsigned char ciphertext[MAX_LENTH];          //密文字符数组
    int Plaintext[MAX_LENTH];           //明文整数数组
    int Ciphertext[MAX_LENTH];          //密文整数数组
    int n;
    int e;//公钥
    int d;//私钥
    int fain;//φ(n)
    size_t Pseudoprime();          //生成伪素数
    bool rabinmiller(size_t n, size_t k);//素性检测
    int BianaryTransform(int num, int bin_num[]);//二进制转换
    long long Modular_Exonentiation(long long a, int b, int n);//模重复平方算法
    int Exgcd(int m,int n,int &x);  //欧几里得扩展算法
    void RSA_Encrypt();//加密
    void RSA_Decrypt();//解密
    void RSA_Signature();//签名
    void RSA_Vertify();//验证
    int RSA_Delay();
    void RSA_Initialize();//初始化，生成e，d，n，φn
    void Initialize();//初始化，转化字符数组为整数数组，并debug输出
};

#endif // RSA_H
